package com.haust.cart.controller;

import com.haust.cart.service.CartService;
import com.haust.commons.pojo.HaustResult;
import com.haust.pojo.TbUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin
public class CartController {
    @Autowired
    private CartService cartService;


    /**
     * 创建订单的步骤之：
     * 删除购物车中添加的商品
     *
     * @param list   map   key      valule
     *               itemId  通过商品id查找 购物车中的商品
     *               num     用于事务回滚时的 数据恢复
     * @param userId 用户的id ，通过用户id,查找购物车
     * @return
     */
    @PostMapping("/cart/clearCart4CreateOrder")
    public HaustResult clearCart4CreateOrder(
            @RequestBody List<Map<String, Object>> list,
            @RequestParam Long userId
    ) {
        return cartService.clearCart4CreateOrder(list, userId);
    }

    /**
     * 步骤：
     * 1、根据itemId找到对应的商品
     * 2、根据session找到登录的用户，通过用户的id，找到对应redis中，该用户对用的购物车
     * 3、对购物车进行，添加：
     * 如果购物车中有该商品，进行累加
     * 如果购物车中没有该商品，则添加
     * 添加购物车
     *
     * @param itemId 商品id
     * @param num    商品数量
     * @return
     */
    @GetMapping("/cart/addItem")
    public HaustResult addItem(Long itemId, Integer num, HttpSession session) {
        return cartService.addItem(itemId, num, (TbUser) session.getAttribute("loginUser"));
    }

    @PostMapping("/cart/showCart")
    public HaustResult showCart(HttpSession session) {
        return cartService.showCart((TbUser) session.getAttribute("loginUser"));
    }

    /**
     * 修改购物车中 添加的商品数量
     *
     * @param itemId 商品id
     * @param num    购物车商品数量
     * @return
     */
    @PostMapping("/cart/updateItemNum")
    public HaustResult updateItemNum(Long itemId, Integer num, HttpSession session) {
        return cartService.updateItemNum(itemId, num, (TbUser) session.getAttribute("loginUser"));
    }


    /**
     * 去结算功能
     *
     * @param id 购物车中商品的id
     * @return
     */
    @PostMapping("/cart/goSettlement")
    public HaustResult goSettlement(Long[] id, HttpSession session) {
        return cartService.goSettlement(id, (TbUser) session.getAttribute("loginUser"));
    }

}
